/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

import componenten.Database;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;

/**
 *
 * @author daveronvanderham
 */
public class Spelers {

    private int lid;
    private String toernooi_naam;
    private String toernooi_datum;
    private String betaalstatus;
    private double prijzengeld;
    private int rating;
    private String email;
    private String tussenvoegsel;

    public Spelers() {
    }

    public Spelers(int speler , String toernooiNaam , String toernooiDatum) {

        String sql = "SELECT s.lid_id ,s.speler_betaalstatus , s.speler_prijzengeld , s.toernooi_naam , s.toernooi_datum , l.lid_rating , p.persoon_email FROM speler s join persoon p on s.lid_id = p.persoon_id join lid l on l.persoon_id = s.lid_id WHERE s.lid_id = '" + speler + "' AND s.toernooi_datum = '"+toernooiDatum+"' and s.toernooi_naam = '"+toernooiNaam+"';";
        
        try {

            ResultSet result = Database.executeSelectQuery(sql);
            result.next();
            this.lid = result.getInt("lid_id");
            this.toernooi_datum = result.getString("toernooi_datum");
            this.toernooi_naam = result.getString("toernooi_naam");
            this.betaalstatus = result.getString("s.speler_betaalstatus");
            this.prijzengeld = result.getDouble("speler_prijzengeld");
            this.rating = result.getInt("lid_rating");
            this.email = result.getString("persoon_email");

        } catch (SQLException e) {
            System.out.print(e);
        }

    }

    /**
     * @return the lid
     */
    public int getLid() {
        return lid;
    }

    /**
     * @param lid the lid to set
     */
    public void setLid(int lid) {
        this.lid = lid;
    }

    /**
     * @return the betaalstatus
     */
    public String getBetaalstatus() {
        return betaalstatus;
    }

    /**
     * @param betaalstatus the betaalstatus to set
     */
    public void setBetaalstatus(String betaalstatus) {
        this.betaalstatus = betaalstatus;
    }

    /**
     * @return the prijzengeld
     */
    public double getPrijzengeld() {
        return prijzengeld;
    }

    /**
     * @param prijzengeld the prijzengeld to set
     */
    public void setPrijzengeld(double prijzengeld) {
        this.prijzengeld = prijzengeld;
    }

    /**
     * @return the rating
     */
    public int getRating() {
        return rating;
    }

    /**
     * @param rating the rating to set
     */
    public void setRating(int rating) {
        this.rating = rating;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }

    /**
     * @param email the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * @return the tussenvoegsel
     */
    public String getTussenvoegsel() {
        return tussenvoegsel;
    }

    /**
     * @param tussenvoegsel the tussenvoegsel to set
     */
    public void setTussenvoegsel(String tussenvoegsel) {
        this.tussenvoegsel = tussenvoegsel;
    }

    /**
     * @return the toernooi_naam
     */
    public String getToernooi_naam() {
        return toernooi_naam;
    }

    /**
     * @param toernooi_naam the toernooi_naam to set
     */
    public void setToernooi_naam(String toernooi_naam) {
        this.toernooi_naam = toernooi_naam;
    }

    /**
     * @return the toernooi_datum
     */
    public String getToernooi_datum() {
        return toernooi_datum;
    }

    /**
     * @param toernooi_datum the toernooi_datum to set
     */
    public void setToernooi_datum(String toernooi_datum) {
        this.toernooi_datum = toernooi_datum;
    }

    public boolean insert() {

        boolean successful = false;

        //sla persoon op in de database, mbv  Database.executeInsert
        //de code sla je niet op, die wordt automatisch gegenereerd
        String query = "Insert into speler( lid_id, toernooi_naam , toernooi_datum , speler_betaalstatus) values('"
                + getLid() + "','"
                + getToernooi_naam() + "','"
                + getToernooi_datum() + "','"
                + getBetaalstatus()+"')";

        //verkorte if ... else constructie met ? en :
        if (Database.executeInsertQuery(query) == 1) { //tenminste 1 record inserted

            successful = true;
        }

        return successful;
    }

    public boolean update() {

        boolean successful = false;

        //sla persoon op in de database, mbv  Database.executeInsert
        //de code sla je niet op, die wordt automatisch gegenereerd
        String query = "UPDATE speler SET"
                + " speler_betaalstatus ='" + getBetaalstatus() + "'"
                + " WHERE toernooi_datum = '" + getToernooi_datum() + "' AND toernooi_naam = '" + getToernooi_naam() + "' AND lid_id = '" + getLid() + "'";

        //verkorte if ... else constructie met ? en :
        if (Database.executeUpdateQuery(query) == 1) { //tenminste 1 record inserted
            JOptionPane.showMessageDialog(null, "deelnemer gewijzigd");
            successful = true;
        }

        return successful;
    }

    public boolean delete() {

        boolean successful = false;

        //sla persoon op in de database, mbv  Database.executeInsert
        //de code sla je niet op, die wordt automatisch gegenereerd
        String query = "DELETE FROM speler WHERE toernooi_datum = " + getToernooi_datum() + " AND toernooi_naam = " + getToernooi_naam() + "AND lid_id = " + getLid() + "";

        //verkorte if ... else constructie met ? en :
        if (Database.executeUpdateQuery(query) == 1) { //tenminste 1 record inserted
            JOptionPane.showMessageDialog(null, "deelnemer verwijderd");
            successful = true;
        }

        return successful;
    }

    public Spelers[] haalSpelersOp(String toernooiDatum, String toernooiNaam) {

        int aantalSpelers = this.haalAantalSpelersOp(toernooiDatum, toernooiNaam);

        //Lijstje aanmaken voor de tennistoernooien die we uit de database gaan halen. 
        Spelers[] spelers;
        if (aantalSpelers == -1) {
            return null;
        } else {
            spelers = new Spelers[aantalSpelers];
        }

        try {

            String sql = "SELECT * FROM speler WHERE toernooi_datum = '" + toernooiDatum + "' AND toernooi_naam = '" + toernooiNaam + "' ";
            ResultSet resultaat = Database.executeSelectQuery(sql);

            int teller = 0;
            while (resultaat.next()) {

                Spelers speler = new Spelers(resultaat.getInt("lid_id"), toernooiNaam,toernooiDatum );

                spelers[teller] = speler;
                teller++;
            }

            return spelers;
        } catch (SQLException e) {
            return null;
        }
    }

    public int haalAantalSpelersOp(String toernooiDatum, String toernooiNaam) {
        try {
            String sql = "SELECT COUNT(*) AS aantal FROM speler WHERE toernooi_datum = '" + toernooiDatum + "' AND toernooi_naam = '" + toernooiNaam + "' ";

            ResultSet resultaat = Database.executeSelectQuery(sql);
            resultaat.next();
            int aantalLocaties = resultaat.getInt("aantal");
            return aantalLocaties;
        } catch (SQLException e) {
            return -1;
        }
    }
    
    public Spelers[] haalWinnaarsOp(String toernooiDatum, String toernooiNaam, int rondenummer) {

        int aantalSpelers = this.haalAantalWinnaarsOp(toernooiDatum, toernooiNaam , rondenummer);

        //Lijstje aanmaken voor de tennistoernooien die we uit de database gaan halen. 
        Spelers[] spelers;
        if (aantalSpelers == -1) {
            return null;
        } else {
            spelers = new Spelers[aantalSpelers];
        }

        try {

            String sql = "SELECT * FROM tafelronde WHERE toernooi_datum = '" + toernooiDatum + "' AND toernooi_naam = '" + toernooiNaam + "' AND tafelronde_rondenummer = "+rondenummer+" ";
            ResultSet resultaat = Database.executeSelectQuery(sql);

            int teller = 0;
            while (resultaat.next()) {

                Spelers speler = new Spelers(resultaat.getInt("tafelronde_winnaar_id"), toernooiNaam,toernooiDatum );

                spelers[teller] = speler;
                teller++;
            }

            return spelers;
        } catch (SQLException e) {
            return null;
        }
    }
        public int haalAantalWinnaarsOp(String toernooiDatum, String toernooiNaam ,int rondenummer) {
        try {
            String sql = "SELECT COUNT(*) AS aantal FROM tafelronde WHERE toernooi_datum = '" + toernooiDatum + "' AND toernooi_naam = '" + toernooiNaam + "' AND tafelronde_rondenummer = "+rondenummer+" ";

            ResultSet resultaat = Database.executeSelectQuery(sql);
            resultaat.next();
            int aantalLocaties = resultaat.getInt("aantal");
            return aantalLocaties;
        } catch (SQLException e) {
            return -1;
        }
    }

    public boolean addSpeler() {

        boolean successful = false;

        //sla persoon op in de database, mbv  Database.executeInsert
        //de code sla je niet op, die wordt automatisch gegenereerd
        String query = "Insert into speler( lid_id, speler_betaalstatus ,toernooi_naam , toernooi_datum ) values('"
                + this.lid + "','"
                + this.betaalstatus + "','"
                + this.toernooi_naam + "','"
                + this.toernooi_datum + "')";

        //verkorte if ... else constructie met ? en :
        if (Database.executeInsertQuery(query) == 1) { //tenminste 1 record inserted

            successful = true;
        }

        return successful;
    }
}